MySQL小记 | 您所在的位置:网站首页 › MySQL DQL查询 › MySQL小记 |
目录 数据库概念 关系型数据库 MySQL使用 SQL语言 sql分类 DDL:操作数据库和表 操作数据库 操作表 DML:数据操作语言,用来增删改数据库记录 1.插入数据 2.删除数据 3.修改数据 DQL:查询 条件查询 模糊查询 字段的运算和去重 排序 order by 聚合函数 分组 group by 分页 limit 数据库概念存储数据的仓库,用于存储和管理数据 关系型数据库由行和列组成的这种二维表,而且表和表之间有对应关系。 MySQL就是关系型数据库的一种。 MySQL使用1.登录 cmd-->mysql -uroot -p密码 2.退出 exit SQL语言结构化查询语言 通过sql语言可以操作所有的关系型数据库。每种数据库之间会存在差异,称为 "方言"。 sql分类DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等; DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改) DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别; DQL(Data Query Language):数据查询语言,用来查询记录(数据)。 DDL:操作数据库和表 操作数据库创建:create database 数据库名称; 删除:drop database 数据库名称; 修改字符集:alter database 数据库名称 character set gbk; 查询:show databases; 查询所有数据库名称 show create database 数据库名称; 查看建库语句,可以看到编码 切换库:use 库名 操作表就是创建表头(列,字段) 常见字段的数据类型: int:整型 id int, * double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99; money double(5,2) char(10):固定长度字符串类型; name char(10) "张三" varchar(10):可变长度字符串类型; 例:name varchar(10) "张三" text:字符串类型;存大格式的文本 比如存个小说 一般不用 blob:字节类型;存字节类型的数据 比如电影字节 图片字节 但是一般不会把字节数据存到数据库当中 date:日期类型,格式为:yyyy-MM-dd; 2020-10-12 time:时间类型,格式为:hh:mm:ss 14:30:30 datetime:日期时间类型 yyyy-MM-dd hh:mm:ss 2020-10-12 14:30:30 * timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss * 如果该类型的字段不给赋值,则默认当前时间 创建: create table 表名( 列名1 类型1, 列名2 类型2, ... 列名n 类型n ); create table student( id int, -- 编号 sname varchar(10), -- 姓名 age int, -- 年龄 sal double(6,2), -- 工资 birthday date -- 生日 ); 删除表: drop table 表名; 查看库中所有表:show tables; 查看表结构:desc 表名; 增加一个表头:alter table student add(phone char(11)); 删除一个表头:alter table student drop phone; 修改表头名称:alter table student change id sid int; 修改表头数据类型:alter table student modify sal int ; 或:alter table student change sal sal double(5,2); 修改表名:alter table student rename to stu; DML:数据操作语言,用来增删改数据库记录 1.插入数据插入所有: insert into student(id,name,age) values (1,'zhangsan',23); 简写: insert into student values (1,'zhangsan',23); 个别字段插入: insert into student(id,name) values(2,'lisi'); 2.删除数据1.全部删除: delete from student; 2.where 条件删除 =、!=、=、and (&&) 、or (||) delete from student where id=1; 3.修改数据1.没有条件修改 update student set sname='wangwu',age=30; 2.有条件修改 update student set sname='zhangsan',age=20 where id=1; DQL:查询1.查询表中所有数据 select * from student; 建议全写,而不是写个* select id,sname,age,sal,birthday from student; 2.查询个别字段 select sname,id from student; 条件查询=、!=、(不等于)、=; BETWEEN…AND; 在什么范围之间 IN(set); IS NULL;为空 IS NOT NULL; 不为空 AND; 并且 OR; 或者 NOT;非 1.等值查询 select * from emp where empno=7566; 2.between....and select * from emp where sal between 2000 and 5000; 3.in select * from emp where empno in(7499,7788,7934,55555); 4.null值(is null / is not null) select * from emp where comm is null; 5.as 字段别名 as可不写 select empno as 员工工号,ename as 员工姓名,sal 工资 from emp; select empno 员工工号,ename 员工姓名,sal 工资 from emp; 6.表别名 select empno 员工工号,ename 员工姓名,sal 工资 from emp e where e.empno=7499; 模糊查询% 通配多个任意字符 _ 通配单个任意字符 1.姓名包含M select * from emp as e where ename like '%M%'; 2.以S开头 select * from emp as e where ename like 'S%'; 3.以S结尾 select * from emp as e where ename like '%S'; 4.第二个字母是A select * from emp as e where ename like '_A%'; 5.五个字母组成 select * from emp as e where ename like '_____'; 字段的运算和去重查询年薪 SELECT empno,ename,sal,comm,sal*12 AS 年薪 FROM emp; null值参与运算结果是null,若想要把null值当作0,用ifnull IFNULL(comm,0) 如果comm是null,就取0 不是null 取你原本的值 去重 select distinct sal from emp where sal=3000; 排序 order by升序 asc 降序 desc 聚合函数对列做运算 -- 统计员工有多少人 SELECT COUNT(empno) AS 总人数 FROM emp; -- 传入* 也可以 SELECT COUNT(*) AS 总人数 FROM emp; -- 工资最值 SELECT MAX(sal) AS 最高工资 FROM emp; SELECT MIN(sal) AS 最低工资 FROM emp; -- 平均工资 SELECT AVG(sal) AS 平均工资 FROM emp; -- 总工资 SELECT SUM(sal) AS 总工资 FROM emp; 分组 group by和聚合函数配合使用 -- 比如我按部分编号分组 比如有三个部门 然后我求每个部门的平均工资 那展示出来的数据应该有三条 SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp GROUP BY deptno; -- 按照岗位分组,统计每种岗位多少人 SELECT job '岗位',COUNT(job) '岗位人数' FROM emp GROUP BY job; -- 1.例如查询 每个部门的部门编号 以及每个部门工资大于1500的人数,分组之前要进行筛选 -- where 在分组之前进行条件的筛选,符合条件的参与分组,不符合条件的不参与分组。 SELECT deptno '部门编号',COUNT(empno) '部门人数' FROM emp WHERE sal>1500 GROUP BY deptno; -- 2.例如 我要查询 各个部门平均工资 大于2000 的部门 -- having:在分组之后,对结果集的筛选 SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp GROUP BY deptno HAVING AVG(sal)>2000; SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp GROUP BY deptno HAVING 部门的平均工资>2000; -- 3. 例如我要查询 各个部门 员工工资大于1500 的平均工资 并且平均工资 大于2000的部门 SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp WHERE sal>1500 GROUP BY deptno HAVING 部门的平均工资>2000; -- having 和where的区别? -- * where和having -- * where:在分组之前对条件进行限定。不满足条件,就不会参与分组 -- * having:在分组之后,对结果集的筛选 -- 4. 例如我要查询 各个部门 员工工资大于1500 的平均工资 并且平均工资 大于2000的部门,升序排列 SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp WHERE sal>1500 GROUP BY deptno HAVING 部门的平均工资>2000 ORDER BY 部门的平均工资 ASC; 分页 limitlimit 起始索引,每页的条数 -- 第一页 SELECT * FROM emp LIMIT 0,3; -- 第二页 SELECT * FROM emp LIMIT 3,3; -- 第三页 SELECT * FROM emp LIMIT 6,3; -- 第四页 SELECT * FROM emp LIMIT 9,3; -- 第五页 SELECT * FROM emp LIMIT 12,3; -- 起始索引=(页码-1)*每页条数 |
CopyRight 2018-2019 实验室设备网 版权所有 |